package br.com.Orange.dao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import br.com.Orange.util.negocio.ObjetoIdentificado;

public abstract class RepositorioGenericoSet <ID, Dado extends ObjetoIdentificado<ID>> {
	
	protected Set<Dado> dados = null;
	
	public RepositorioGenericoSet(){
		dados = new HashSet<Dado>();
	}
	
	public void inserir(Dado dado){
		dados.add(dado);
	}
	
	public boolean existe(ID id){
		boolean resp = false;
		Iterator<Dado> ite = dados.iterator();
		while (ite.hasNext() && !resp){
			Dado dado = ite.next();
			if (dado.getID().equals(id)){
				resp = true;
			}
		}
		return resp;
	}
	
	public Dado procurar(ID id) {
		Dado dadoAchado = null;
		Iterator<Dado> ite = dados.iterator();
		while (ite.hasNext()){
			Dado dado = ite.next();
			if (dado.getID().equals(id)){
				dadoAchado = dado;
			}
		}
		return dadoAchado;
	}
	
	public void atualizar(Dado dado) {
		remover(dado.getID());
		dados.add(dado);
	}
	
	public void remover(ID id) {
		Dado dado = procurar(id);
		if (dado != null){
			dados.remove(dado);
		}
	}
	
	public Collection<Dado> listar() {
		Iterator<Dado> ite = dados.iterator();
		Collection<Dado> col = new ArrayList<Dado>();
		while (ite.hasNext()){
			col.add(ite.next());
		}
		return col;
	
	}

}
